<?php

/**
 * ecshop ERP v1.0
 * ----------------------------------------------------------------------------
 * http://www.phpally.com
 * Jacklee的博客 致力于php技术
 * ----------------------------------------------------------------------------
 * 作者: Jacklee
 * 邮箱: jack349392900@gmail.com
 * 创建时间: 2013-11-18
 * 最后修改时间: 2013-11-18
 */

/**
 * 数组处理类
 */

require_once(dirname(__FILE__) . '/cls_base.php');

class cls_array extends cls_base{
	
	public $coding='utf-8';
	
	public function cls_array($coding='utf-8')
	{
		$this->coding=$coding;
	}
	
	//public function __construct($coding='utf-8')
	//{
	//	$this->cls_array($coding);
	//}
	
	
	/**
	 * 去除数组中的空元素
	 */		
	public function trim_empty($array)
	{
		if(!is_array($array))
		{
			return false;
		}
		else{
			if(empty($array))
			{
				return array();
			}
			else{
				foreach($array as $k=>$v)
				{
					if(!empty($v))
					{
						$new_array[$k]=$v;
					}
				}
			}
		}
		return $new_array;
	}
	
	/**
	 * 去除数组中重复元素
	 */		
	public function trim_repeat($array)
	{
		if(!is_array($array))
		{
			return false;
		}
		else{
			if(empty($array))
			{
				return array();
			}
			else{
				$new_array=array();
				foreach($array as $k=>$v)
				{
					if(!in_array($v,$new_array))
					{
						$new_array[$k]=$v;
					}
				}
				return $new_array;
			}		
		}		
	}

	/**
	 * 去除数组key
	 */		
	public function remove_key($array)
	{
		if(!is_array($array))
		{
			return false;
		}
		else{
			if(empty($array))
			{
				return array();
			}
			else{
				$new_array=array();
				foreach($array as $k=>$v)
				{
						$new_array[]=$v;
				}
				return $new_array;
			}		
		}			
	}
	
	/**
	 * 截取数组元素
	 * $array=array(1,2,3,4,5,6);
	 * sub_array($array,0,2),返回array(1,2)
	 * sub_array($array,-2,2),返回array(5,6)
	 * sub_array($array,-3,2),返回array(4,5)
	 */		
	public function sub_array($array,$start,$num,$keep_key=true)
	{
		if(!is_array($array))
		{
			return false;
		}
		else{
			if(empty($array))
			{
				return array();
			}
			else{
				if($start>=0)
				{
					reset($array);
					while($tmp[]=each($array))
					{
						;
					}
					
					$new_array=$this->trim_empty($tmp);
					
					foreach($new_array as $key=>$v)
					{
						if($key>=$start && $key<$start+$num)
						{
							$result[$v['key']]=$v['value'];
							
						}	
					}
					
					if($keep_key==true)
					{
						return $result;
					}
					else{
						return $this->remove_key($result);
					}
				}
				else{//从后面开始
					$array_len=count($array);
					return $this->sub_array($array,$array_len+$start,$num,$keep_key);
				}
			}		
		}		
	}
	
	/*
	 * 递规的对所有数组元素进行$func操作
	 */
	public function traverse_array($var,$func)
	{
		if(is_array($var))
		{
			if(!empty($var))
			{
				foreach($var as $key=>$item)
				{
					$var[$key]=$this->traverse_array($item,$func);
				}
			}
		}
		else{
			$var=$func($var);
		}
		return $var;
	}		
	
	
	/*
	 * 递规的对所有数组元素进行base64_encode编码
	 */
	public function encode($var)
	{
		return $this->traverse_array($var,'base64_encode');
	}
	
	
	/*
	 * 递规的对所有数组元素进行base64_decode解码
	 */
	public function decode($var)
	{
		return $this->traverse_array($var,'base64_decode');
	}	
	
	
	/*
	 * 重构一个数组，把所有最底层数组元素重组成一个新数组
	 * 例如：$array=array('0'=>'a','1'=>'b','2'=>array('x',array('m','n'),'z'),'3'=>'d');
	 * 返回  array('a','b','d','x','z','m','n');
	 */
	public function flat_array($array)
	{
		while(!empty($array))
		{
			foreach($array as $key=>$item)
			{
				if(is_array($item))
				{
					foreach($item as $key2=>$item2)
					{
						$array[]=$item2;
					}
					unset($array[$key]);
				}
				else{
					$new_array[]=$item;
					unset($array[$key]);
				}
			}
		}
		return $new_array;
	}
	
	/*
	 * 递规的对所有数组元素进行utf8到gbk转换
	 */	
	public function utf2gbk($var)
	{
		if(is_array($var))
		{
			if(!empty($var))
			{
				foreach($var as $key=>$item)
				{
					$var[$key]=$this->utf2gbk($item);
				}
			}				
		}
		else{
			if($this->is_utf8($var))
			{
				return iconv('utf-8','gbk',$var); 
			}
			else{
				return $var;
			}
		}
		
		return $var;
	}
	
	/*
	 * 递规的对所有数组元素进行gbk到utf8转换
	 */	
	public function gbk2utf($var)
	{
		if(is_array($var))
		{
			if(!empty($var))
			{
				foreach($var as $key=>$item)
				{
					$var[$key]=$this->gbk2utf($item);
				}
			}				
		}
		else{
			if(!$this->is_utf8($var))
			{
				return iconv('gbk','utf-8',$var); 
			}
			else{
				return $var;
			}
		}
		
		return $var;
	}	
}

?>